# -*- coding: utf-8 -*-
# @Time: 2025/5/23 16:55
# @Author: wzd
# @Email: 2146333089@qq.com
# @File: validators.py
import re
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

def validate_username(value):
    """校验用户名：只能包含字母、数字、下划线，长度4-20个字符"""
    pattern = r'^[a-zA-Z0-9_]{1,20}$'
    if not re.match(pattern, value):
        raise ValidationError(
            _('用户名只能包含字母、数字和下划线，长度1-20个字符'),
            params={'value': value},
        )

def validate_password(value):
    """校验密码：长度至少8个字符，包含大小写字母和数字"""
    pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$'
    if not re.match(pattern, value):
        raise ValidationError(
            _('密码长度至少8个字符，必须包含大小写字母和数字'),
            params={'value': value},
        )

def validate_email(value):
    """校验邮箱格式"""
    pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
    if not re.match(pattern, value):
        raise ValidationError(
            _('邮箱格式不正确'),
            params={'value': value},
        )

def validate_phone(value):
    """校验手机号：11位数字，以1开头"""
    pattern = r'^1\d{10}$'
    if not re.match(pattern, value):
        raise ValidationError(
            _('手机号格式不正确'),
            params={'value': value},
        )

def validate_student_id(value):
    """校验学号：格式自定义，示例为字母开头+数字"""
    pattern = r'^[A-Za-z]\d{5,19}$'
    if not re.match(pattern, value):
        raise ValidationError(
            _('学号格式不正确，必须以字母开头，后面跟5-19位数字'),
            params={'value': value},
        )

def validate_teacher_id(value):
    """校验教师编号：格式自定义，示例为T+6位数字"""
    pattern = r'^T\d{6}$'
    if not re.match(pattern, value):
        raise ValidationError(
            _('教师编号格式不正确，必须以T开头，后面跟6位数字'),
            params={'value': value},
        )